package cn.luke.basic.controller;


import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.luke.basic.debounces.Debounce;
import cn.luke.basic.entity.DtoApiLog;
import cn.luke.basic.entity.DtoTemplate;
import cn.luke.basic.entity.req.ReqTemplateCount;
import cn.luke.basic.enums.EnumCountType;
import cn.luke.basic.log_api.LogApi;
import cn.luke.basic.rs.ResponseResult;
import cn.luke.basic.utils.UtilsEnum;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;


import cn.luke.basic.utils.MyAssert;


import cn.luke.basic.services.ServiceTemplate;

import java.util.Map;


/**
 * 模板
 * pathName
 */

@RestController
@ResponseResult
@RequestMapping("/template")
public class ControllerTemplate implements MyAssert {
    @Resource
    private ServiceTemplate serviceTemplate;


    /**
     * 模板-保存
     */
    @Debounce
    @LogApi("模板-保存")
    @PostMapping("/save")
//    @SaCheckPermission("template.save" )
    public void save(@RequestBody DtoTemplate template) {
        strIsNull(template.getImageUrl(), "图片地址");
        strIsNull(template.getTitle(), "标题");
        strIsNull(template.getStartTime(), "开始时间");
        serviceTemplate.save(template);
    }


    /**
     * 模板-编辑
     */
    @Debounce
    @LogApi("模板-编辑")
    @PostMapping("/update")
//    @SaCheckPermission("template.save" )
    public void update(@RequestBody DtoTemplate template) {
        intIsNull(template.getId(), "模板ID");
        serviceTemplate.updateById(template);
    }

    /**
     * 模板-删除
     */
    @Debounce
    @LogApi("模板-删除")
    @GetMapping("/delete/{id}")
    public void update(@PathVariable("id") Integer id) {
        serviceTemplate.deleteById(id);
    }

    /**
     * 更新相关数据量
     */
    @GetMapping("/addCount/{id}/{type}")
    public void addPageViewCount(@PathVariable Integer id, @PathVariable Integer type) {
        UtilsEnum.existsInEnum(EnumCountType.class, type);
        serviceTemplate.addCount(id, type);
    }

    /**
     * 模板-状态修改
     */
    @Debounce
    @GetMapping("/updateStatus")
    public void updateStatus(@RequestParam("id") Integer id, @RequestParam("status") Integer status) {
        serviceTemplate.updateStatus(id, status);
    }

    /**
     * 根据id查询模板数据集合
     */
    @Debounce
    @GetMapping("/find/{id}")
    public DtoTemplate findById(@PathVariable Integer id) {
        return serviceTemplate.findById(id);
    }

    /**
     * 模板-查询
     */
    @Debounce
    @PostMapping("/page")
    public IPage<DtoTemplate> get(@RequestBody Map<String, Object> params) {
        pageIsNull(params);
        return serviceTemplate.findPageByParams(params);
    }
}
